"""
    exercise one: 格式化字符串

"""
import string

year = 2016
event='Referendum'
print(f'Result of the {year} {event}')
yes_votes=42_572_654
no_votes=43_132_495
percentage=yes_votes / (yes_votes + no_votes)
print('{:-9} YES votes {:2.2%}'.format(yes_votes, percentage))


"""
    str
    repr
"""
s = 'Hello, world.'
print(repr(s))
print(str(s))
x = 10 * 3.25
y = 200 * 200
s = 'The value of x is ' + repr(x) + ', and y is ' + repr(y)  + '...'
print(s)

hello = 'hello, world\n'
hellos = repr(hello)
print(hellos) # 打印'hello, world\n'
# repr() 会添加反斜杠和引号
# repr可以是任意的python对象
print(repr((x, y, ('spam', 'eggs'))))
# 比较类型
print(type(repr((x, y, ('spam', 'eggs')))) is str) # True
print(isinstance(repr((x, y, ('spam', 'eggs'))), str))

# 使用f或F将表达式写成{expression}来在字符串中包含python表达式的值
import math
print(f'The value of pi is approximately {math.pi:.3f}')


table = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 7678}
for name, phone in table.items():
    print(f'{name:10} ==> {phone:10d}')
    print(f'{name:*<10} ==> {phone:*>10d}')
# Sjoerd     ==>       4127
# Jack       ==>       4098
# Dcab       ==>       7678


"""
    其他的修饰符可用于在格式化之前转化值。 '!a' 应用 ascii() ，'!s' 应用 str()，还有 '!r' 应用 repr():
"""
animals = 'eels'
print(f'My hovercraft is full of {animals}.')
# My hovercraft is full of eels.
print(f'My hovercraft is full of {animals!r}.')
# My hovercraft is full of 'eels'.

print("\n-----------------------------------------------------------\n")
"""
    字符串的format方法
"""
print("We are the {} who say '{}!'".format('knights', 'Ni'))
print("\n-----------------------------------------------------------\n")
print('{0} and {1}'.format('spam', 'eggs'))
# spam and eggs
print('{1} and {0}'.format('spam', 'eggs'))
# eggs and spam
print("\n-----------------------------------------------------------\n")
print("The {person} is eating {food}".format(person="Li Hua", food="Pizza"))
# 传递字典进去，那么字符串匹配中需要用0指定第一个参数。
info = {"person":"LiHua", "food":"Pizza"}
print("The {0[person]} is eating {0[food]}".format(info))
# 将info通过** 将其解构成为关键字参数传递进去
print("The {person} is eating {food}".format(**info))
print("\n-----------------------------------------------------------\n")
print('The story of {0}, {1}, and {other}.'.format('Bill', 'Manfred',
                                                       other='Georg'))
# The story of Bill, Manfred, and Georg.

for x in range(1, 11):
   print('{0:*^2d} {1:*^3d} {2:*^4d}'.format(x, x*x, x*x*x))

print("aa".rjust(3, "*"))


'''
    读写文件吧~
    open()返回一个file_object:open(filename,mode)
    模式: r 默认 读取
         w      写入
         a      追加
         r+     打开文件进行读写
'''
# file_path="D:\\Application\\WorkSpace\\PYCHARM\\full-stack-python\\.gitignore"
# with open("sample.txt","a") as f:
#     f.write("\nHello, Js")

"""
    读取文件所有行，将所有行
"""
# f = open("sample.txt", "r")
# print(list(f))
# f.close()

# 或者使用readlines()
f=open("sample.txt","r+")
print(f.readlines()) # 读取
f.write(str(('the answer', 42))) # 写入
print(f.tell())
f.close()

"""
    将其他数据类型写入到文件前需要将其转换为字符串
    value = ('the answer' , 42)
    s = str(value)
    f.write(s)
"""

"""
    f.tell() 返回一整数，给出文件对象在文件中的当前位置，表示为二进制模式下时从文件开始的字节数，以及
    文本模式下的不透明数字。
    要改变文件对象的位置，请使用f.seek(offset,whence)。从whence偏移offset个单位，参考点就是whence
    whence为0值表示从文件开头起算，1表示使用当前文件位置，2表示使用文件末尾作为参考点。whence如果省略则默认为0，表示开头
"""


"""
    使用json保存结构化数据
    区别一下: json.dump(x,f) json.dumps(), json.load(f)
    1. json.dump(obj, fp)：
        将 Python 对象 obj 序列化为 JSON 格式，并写入到文件对象 fp 中。
        fp 通常是通过 open() 函数打开的文件对象。
    2. json.dumps(obj):
        将 Python 对象 obj 序列化为 JSON 格式，并以字符串的形式返回。
        不需要文件对象，返回的是 JSON 字符串。
    3. json.load(fp)：
        从文件对象 fp 中读取 JSON 数据，并将其反序列化为 Python 对象。
        fp 是通过 open() 函数打开的文件对象。
"""
import json
print(json.dumps([1, 'simple', 'list']))

# 创建一个 Python 字典
data = {
    "name": "Alice",
    "age": 30,
    "city": "New York",
    "is_student": False,
    "courses": ["Math", "Science"]
}

# 1. 使用 json.dump() 将数据写入文件
with open('data.json', 'w') as f:
    json.dump(data, f)  # 将字典序列化为 JSON 并写入文件

# 2. 使用 json.dumps() 将数据序列化为 JSON 字符串
json_string = json.dumps(data)
print("JSON 字符串:", json_string)

# 3. 使用 json.load() 从文件中读取数据
with open('data.json', 'r') as f:
    loaded_data = json.load(f)  # 从文件中读取 JSON 并反序列化为 Python 对象
    print("从文件加载的数据:", loaded_data)




